Este script é dedicado a consultas SparQL aos dados do Participa.br.

A análise está assim dividida:

  • quantidades
  • estatísicas (proporções, médias e desvios, variáveis aleatórias)
  • estruturas em rede e da linguagem
  • classificação de conteúdo

In [1]:
import rdflib as r, pylab as p, numpy as n, networkx as x, nltk as k

In [9]:
g=r.Graph()
g.load("storeOpaPopulada.rdf")

In [18]:
sub=g.subjects()
sub_=[ss for ss in sub]


Out[18]:
u'sao 35006 recursos registrados'

In [20]:
print u"são %i recursos registrados em %i triplas"%(len(set(sub_)),len(sub_))


são 35006 recursos registrados em 276043 triplas

São os recursos possuem URIs, assim como as propriedades e valores

Todas as informações são especificadas através de triplas de URIs e dados: (recurso,propriedade, valor), também escrita na forma (sujeito, predicado, objeto), adotada pela rdflib. Cada tripla consiste de três partes:

  • Primeira parte: sujeito, recurso, vértice de partida, origem.
  • Segunda parte: predicado, propriedade, relação, arco, aresta.
  • Terceira parte: objeto, valor, vértice de chegada, destino.

Para maior informatividade, são usadas as URIs mais comuns, de forma a compatibilizar os dados e integrar uma nuvem relevante, por isso os prefixos RDF, SKOS, OPA, OPS, etc. As URIs usadas na "triplificação" dos dados do Participa.br estão especificadas neste documento


In [53]:
OPA=r.Namespace("http://purl.org/socialparticipation/opa#")
OPS=r.Namespace("http://purl.org/socialparticipation/ops#")

In [55]:
participantes=[pessoa for pessoa in g.triples( (None, r.namespace.RDF.type, OPS.Participant) )]
for s,p,o in participantes[-5:]:
    print u"%s é um participante"%s
    for ss,pp,nome in g.triples( (s, r.namespace.FOAF.name, None) ):
        print u"cujo nome é: %s\n"%(nome,)


http://participa.br/profile/fernandapaulo é um participante
cujo nome é: Fernanda dos Santos Paulo

http://participa.br/profile/skarnio é um participante
cujo nome é: Thiago Skárnio

http://participa.br/profile/arlindo.almeida é um participante
cujo nome é: Arlindo José Moura de Almeida

http://participa.br/profile/jefferson é um participante
cujo nome é: jefferson ganev

http://participa.br/profile/daianelopes é um participante
cujo nome é: daiane de oliveira lopes andrade

Usa-se SparQL para navegar e modificar informações em RDF. Por exemplo, para selecionar os nomes "aname" e "bname" de cada amizade, exlicita-se que "?a foaf:knows ?b" e que os nomes são vinculados aos participantes desta relação.


In [44]:
qres = g.query(
    """SELECT DISTINCT ?aname ?bname
       WHERE {
          ?a foaf:knows ?b .
          ?a foaf:name ?aname .
          ?b foaf:name ?bname .
       }""")
amizades=[tripla for tripla in qres]
for amizade in amizades[:15]:
    #print amizade
    print("%s __ conhece __  %s" % amizade)


Naum dos Santos __ conhece __  Thaís Lopes Rodrigues
Marcelo Branco __ conhece __  Vicente de Paula Blum de Oliveira
Paulo Marcello Marques __ conhece __  Fernanda Campos
Henrique Parra Parra Filho __ conhece __  Marcelo Branco
Luis Felipe Coimbra Costa __ conhece __  Juliana Hilário
Laís Azeredo Alves __ conhece __  Helisane Mahlke
Daniel Chiaretti __ conhece __  ANA LUISA ZAGO DE MORAES
Daniel Pitangueira de Avelino __ conhece __  Celia Maria Farias Vieira
Silvia Regina Brandão Salim __ conhece __  kelly cristina alves
Arthur de Moura Del Esposte __ conhece __  Fabio Teixeira
Joenio Costa __ conhece __  Aurélio A. Heckert
Gustavo Belic Cherubina __ conhece __  LUCAS MOREIRA DE SOUSA
Isaac E. Batista __ conhece __  DIEGO DA SILVA BRITTO
Roberto Wohlke __ conhece __  Ana Claudia Schneider Andrade
fabricia girao cavalcante __ conhece __  Laura Zacher

In [70]:
qres = g.query(
    """SELECT DISTINCT ?gname
       WHERE {
          ?a rdf:type foaf:Group .
       }""")
grupos=[tripla for tripla in qres]
len(grupos)
#for amizade in amizades[:15]:
    #print amizade
#    print("%s __ conhece __  %s" % amizade)


Out[70]:
1